package com.ztools.common.util.common.annotateUnit;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.util.concurrent.TimeUnit;

/**
 * @Author: seeTools
 * @Date: 2023/6/12  12:38
 * @Version 1.0
 */
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface AccessLimit {


    /**
     * 资源KEY
     * 不同的接口，使用不同的流量限制，如果key一样，则共用相同的流量池
     */
    String key() default "DefaultRateLimiterKey";

    /**
     * 请求限流时的提示语
     */
    String msg() default "温馨提示：系统繁忙，请稍后再试！";

    /**
     * 超时时间，即能否在指定内得到令牌，如果不能则立即返回，不进入目标方法/类
     * 默认为0，即不等待，获取不到令牌立即返回
     */
    long timeout() default 0;

    /**
     * 超时时间单位，默认取毫秒
     */
    TimeUnit timeUnit() default TimeUnit.MILLISECONDS;

    /**
     * 每秒发放许可数
     */
    double permitsPerSecond() default 10;
}
